route.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { NextResponse } from "next/server";
  2. import { verifyToken } from "@/lib/auth";
  3. import smbClient from "@/lib/smbClient";
  4. export async function GET(request, { params }) {
  5. const headers = new Headers();
  6. headers.set("Cache-Control", "no-store");
  7. const decoded = verifyToken(request);
  8. if (decoded.error) {
  9. return NextResponse.json(
  10. { error: decoded.error },
  11. { status: 401, headers }
  12. );
  13. }
  14. const { path: pathArray = [] } = params;
  15. const niederlassungId = pathArray.shift();
  16. if (decoded.role !== "admin" && decoded.niederlassungId !== niederlassungId) {
  17. console.log(`Keine Berechtigung für diese Niederlassung ${niederlassungId}`);
  18. return NextResponse.json(
  19. { error: "Keine Berechtigung" },
  20. { status: 403, headers }
  21. );
  22. }
  23. const smbPath =
  24. pathArray.length > 0
  25. ? [niederlassungId, ...pathArray].join("\\")
  26. : [niederlassungId].join("\\");
  27. console.log("Versuche, auf folgenden Pfad zuzugreifen:", smbPath);
  28. return new Promise((resolve) => {
  29. smbClient.readdir(smbPath, (err, files) => {
  30. if (err) {
  31. console.error("Fehler beim Zugriff auf den Ordner:", err);
  32. resolve(
  33. NextResponse.json(
  34. {
  35. error: "Fehler beim Zugriff auf den Ordner",
  36. details: err.message,
  37. },
  38. { status: 500, headers }
  39. )
  40. );
  41. } else if (!files || files.length === 0) {
  42. console.log(`Keine Dateien im Pfad ${smbPath} gefunden.`);
  43. resolve(
  44. NextResponse.json(
  45. { message: `Keine Dateien im angegebenen Ordner ${smbPath} gefunden.` },
  46. { status: 200, headers }
  47. )
  48. );
  49. } else {
  50. const sortedFiles = [...files].sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase()));
  51. resolve(NextResponse.json({ files: sortedFiles }, { status: 200, headers }));
  52. }
  53. });
  54. });
  55. }